
/*书P38strcat原函数
void strcat(char s[],char t[]){
    int i,j;

    i = j = 0;
    while(s[i] != '\0')
        i++;
    while((s[i++]=t[j++]) != '\0'){

    }
    ;
}

*/

#include <stdio.h>  
#include <string.h>  

//数组实现strcat1
char* strcat1(char a1[], char b1[]) {  
    int i = 0, j = 0;  
    // 找到字符串a1的末尾  
    while (a1[i] != '\0') {  
        i++;  
    }  
    // 将字符串b1复制到字符串a1的末尾  
    while ((a1[i++] = b1[j++]) != '\0') {  
        // 循环体会自动复制字符，直到遇到b1的结束符'\0'  
    }  
    return a1; // 返回连接后的字符串  
}

// 指针实现的 strcat2 函数
char* strcat2(char* a, char* b) {  
    char* ptr_a = a;  
      
    // 找到字符串a的末尾  
    while (*ptr_a != '\0') {  
        ptr_a++;  
    }  
      
    // 将字符串b的内容复制到字符串a的末尾  
    char* ptr_b = b;  
    while (*ptr_b != '\0') {  
        *ptr_a = *ptr_b;  
        ptr_a++;  
        ptr_b++;  
    }  
      
    // 在连接后的字符串末尾添加空字符'\0'  
    *ptr_a = '\0';  
      
    return a;  
}

int main() {  
    // 测试 strcat1  
    char str1[100] = "Hello, ";  
    char str2[] = "World!";  
    strcat1(str1, str2);  
    printf("strcat1: %s\n", str1); // 应该输出 "Hello, World!"  
  
    // 重置 str1 为初始值，以便进行下一个测试  
    strcpy(str1, "Hello, ");  
  
    // 测试 strcat2  
    char* result2 = strcat2(str1, str2);  
    printf("strcat2: %s\n", result2); // 应该输出 "Hello, World!"  
  
    return 0;  
}  